package Modelo;
import java.awt.Image;
import java.awt.Toolkit;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class Tierra extends Bloque implements Destruible {

	private Integer prioridad;
	private Image imagenTierra;


	public Tierra(Posicion posicion, Planeta planeta){
		super(posicion,planeta);
		this.prioridad = 1;
		imagenTierra = Toolkit.getDefaultToolkit().getImage("imagenes/tierra.png");

	}
	
	public Tierra (Element xmlElement){
		super(xmlElement);
	}
	
	public Integer getPrioridad (){
		return prioridad;
	}
	

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "t";
	}

	@Override
	public void destruir() {
		// TODO Auto-generated method stub
		// Aca se tiene que poder eliminar del planeta 
		// (en nuestro caso sera eliminado de la matriz)
		Planeta planetaActual = getPlaneta();
		planetaActual.destruirBloque(this);
	}

	@Override
	public void actuar(Pooglin pooglin) {
		// TODO Auto-generated method stub
		// Si el pooglin se encuentra sobre el bloque

		if (abajoPooglin(pooglin)){
				pooglin.reiniciarBloquesCaidos();
				pooglin.setVelocidadNormal();
			}
		// Si el pooglin va en sentido hacia derecha
		if ((pooglin.haciaDerecha())&&
				(adelantePooglinDerecha(pooglin))){
			pooglin.cambiarDireccion();		
		}
		// Si el pooglin va en sentido contrario
		else{
			if (adelantePooglinIzquierda(pooglin)){
					pooglin.cambiarDireccion();
				}
		}
	}

	@Override
	public void romper(Pooglin pooglin) {
		// TODO Auto-generated method stub
		// Si el pooglin va en sentido hacia derecha
		if ((pooglin.haciaDerecha())&&
				(adelantePooglinDerecha(pooglin))){
			((RayoLaser)pooglin.getHabilidad()).disparar();
			pooglin.getTerrenoActual().eliminarBloque
			(this.getPosicion());
			pooglin.caminar();				
		}
		// Si el pooglin va en sentido contrario
		else{
			if (adelantePooglinIzquierda(pooglin)){
					((RayoLaser)pooglin.getHabilidad()).disparar();
					pooglin.getTerrenoActual().eliminarBloque
					(this.getPosicion());
					pooglin.caminar();
				}
		}
		if (!pooglin.seMovio()){
			this.actuar(pooglin);
		}
	}

	@Override
	public void excavarUnBloque(Pooglin pooglin) {
		// TODO Auto-generated method stub
		// Si el pooglin se encuentra sobre el bloque
		if (abajoPooglin(pooglin)){
			((TaladroUltraSonico)pooglin.getHabilidad()).excavarUnBloque();
			pooglin.getTerrenoActual().eliminarBloque(this.getPosicion());
			pooglin.caer();
			pooglin.reiniciarBloquesCaidos();
		}
		if (!pooglin.seMovio()){
			this.actuar(pooglin);
		}
	}

	@Override
	public void transportarPooglin(Pooglin pooglin) {
		// TODO Auto-generated method stub
		// Si el pooglin va en sentido hacia derecha
		if ((pooglin.haciaDerecha())&&
				(adelantePooglinDerecha(pooglin))){
			pooglin.setHabilidad(null);
		}
		// Si el pooglin va en sentido contrario
		if ((pooglin.haciaDerecha())&&adelantePooglinIzquierda(pooglin)){
			pooglin.setHabilidad(null);
		}
		if (abajoPooglin(pooglin)){
			((Teletransportacion)pooglin.getHabilidad()).transportarUnPaso();
			pooglin.caminar();
		}
		
	}

	@Override
	public void construirTunel(Pooglin pooglin) {
		// TODO Auto-generated method stub
		// Si el pooglin va en sentido hacia derecha
		if (!abajoPooglin(pooglin))
			pooglin.setHabilidad(null);
	}

	public Image getImagen() {
		return this.imagenTierra;
	}
	
	public Element toXml(Document doc) {
		// TODO Auto-generated method stub
		Element xmlElement = doc.createElement("Bloque");
		xmlElement.setAttribute("Tipo", "Tierra");
		xmlElement.setAttribute("prioridad", ""+this.prioridad);
		xmlElement.appendChild(this.getPosicion().toXml(doc));
		
		return xmlElement;
	}

}
